package com.xiaoq.sites.service.impl;

import com.xiaoq.sites.entity.InterpreterCalendarEntity;
import com.xiaoq.sites.entity.InterpreterEntity;
import com.xiaoq.sites.entity.InterpreterLevelEntity;
import com.xiaoq.sites.repository.IInterpreterCalendarRepository;
import com.xiaoq.sites.repository.IInterpreterLevelRepository;
import com.xiaoq.sites.repository.IInterpreterRepository;
import com.xiaoq.sites.service.IInterpreterService;
import com.xiaoq.sites.vo.InterCalendarDetailVo;
import com.xiaoq.sites.vo.InterCalendarVo;
import com.xiaoq.vo.PagingVo;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.joda.time.DateTime;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.util.ArrayList;
import java.util.List;

//@Service(interfaceClass=IInterpreterApi.class, version="1.0.0")
@Component
public class InterpreterServiceImpl implements IInterpreterService{
	
	@Autowired
	private IInterpreterRepository interpreterRepo;
	
	@Autowired
	private IInterpreterCalendarRepository interpreterCalendarRepo;
	
	@Autowired
	private IInterpreterLevelRepository interpreterLevelRepo;

	@Override
	public List<InterpreterEntity> findInterpreterListBySitesId(String sitesId, Integer status, PagingVo pagingVo) {
		List<InterpreterEntity> interpreterEntityList = null;
		if(StringUtils.isNotBlank(sitesId)) {
			interpreterEntityList = interpreterRepo.findBySitesId(sitesId, status, pagingVo);
		}
		return interpreterEntityList;
	}

	@Override
	public long findInterpreterListCountBySitesId(String sitesId, Integer status) {
		return interpreterRepo.findCountBySitesId(sitesId, status);
	}

	@Override
	public InterpreterEntity findInterpreterById(String id) {
		if(StringUtils.isBlank(id)){
			return null;
		}
		return interpreterRepo.findById(id);
	}

	@Override
	public List<InterpreterCalendarEntity> findInterpreterCalendarListByInterpreterId(String interpreterId) {
		List<InterpreterCalendarEntity> interpreterCalendarEntityList = null;
		if(StringUtils.isNotBlank(interpreterId)) {
			interpreterCalendarEntityList = interpreterCalendarRepo.findByInterpreterId(interpreterId);
		}
		return interpreterCalendarEntityList;
	}

	@Override
	public InterpreterLevelEntity findInterpreterLevelBySitesId(String sitesId) {
		InterpreterLevelEntity interpreterLevelEntity = null;
		if(StringUtils.isNotBlank(sitesId)) {
			interpreterLevelEntity = interpreterLevelRepo.findBySitesId(sitesId);
		}
		return interpreterLevelEntity;
	}

	@Override
	public InterCalendarDetailVo getNearly7DaysNoInterServiceCalendarList(String interpreterId, String sitesId) {
		if(StringUtils.isAnyBlank(interpreterId, sitesId)){
			return null;
		}
		DateTime today = new DateTime();
		DateTime minDate = new DateTime(
				today.getYear(),
				today.getMonthOfYear(),
				today.getDayOfMonth(),
				0,
				0).plusDays(1);

		DateTime maxDate = minDate.plusDays(8);
		List<InterpreterCalendarEntity> interpreterCalendarEntityList = interpreterCalendarRepo.findInterpreterCalendarBetweenTimes(
				interpreterId,
				sitesId,
				minDate.getMillis(),
				maxDate.getMillis()
		);

		List<InterCalendarVo> interCalendarVoList = new ArrayList<>();

		if(CollectionUtils.isNotEmpty(interpreterCalendarEntityList)) {
			interpreterCalendarEntityList.forEach(interpreterCalendarEntity -> {
				InterCalendarVo interCalendarVo = new InterCalendarVo();
				BeanUtils.copyProperties(interpreterCalendarEntity, interCalendarVo);
				interCalendarVoList.add(interCalendarVo);
			});
		}

		InterCalendarDetailVo interCalendarDetailVo = new InterCalendarDetailVo();
		interCalendarDetailVo.setMinDate(minDate.getMillis());
		interCalendarDetailVo.setMaxDate(maxDate.getMillis());
		interCalendarDetailVo.setInterCalendarList(interCalendarVoList);
		return interCalendarDetailVo;
	}

	@Override
	public boolean updateInterCalendarByOrderId(InterpreterCalendarEntity interpreterCalendarEntity) {
		return interpreterCalendarRepo.updateInterCalendarByOrderId(interpreterCalendarEntity);
	}

	@Override
	public boolean saveInterCalendar(InterpreterCalendarEntity interpreterCalendarEntity) {
		return interpreterCalendarRepo.save(interpreterCalendarEntity);
	}

	@Override
	public boolean saveInter(InterpreterEntity interpreterEntity) {
		return interpreterRepo.save(interpreterEntity);
	}

	@Override
	public boolean deleteByIdAndSitesId(String id, String sitesId) {
		return interpreterRepo.delete(id, sitesId);
	}

	@Override
	public boolean updateInterpreterByIdAndSitesId(InterpreterEntity interpreterEntity) {
		if(interpreterEntity==null || StringUtils.isAnyBlank(interpreterEntity.getId(), interpreterEntity.getSitesId())){
			return false;
		}
		return interpreterRepo.update(interpreterEntity);
	}

	@Override
	public InterpreterEntity getInterpreterByUserId(String userId) {
		return interpreterRepo.findByUserId(userId);
	}

	@Override
	public boolean updateInter2Serving(String interId, String shopId) {
		return interpreterRepo.update2Serving(interId, shopId);
	}

	@Override
	public boolean updateInter2WaitService(String interId, String shopId) {
		return interpreterRepo.updateInter2WaitService(interId, shopId);
	}

	@Override
	public boolean updateInter2CanAppoint(String interId, String shopId) {
		return interpreterRepo.updateInter2CanAppoint(interId, shopId);
	}

	@Override
	public InterpreterEntity findByMobile(String mobile) {
		return interpreterRepo.findByMobile(mobile);
	}

	@Override
	public boolean updateByInterId(InterpreterEntity interpreterEntity) {
		if(interpreterEntity==null || StringUtils.isBlank(interpreterEntity.getId())){
			return false;
		}

		return interpreterRepo.update(interpreterEntity);
	}
}
